(function () { if ((typeof jQuery191 === 'undefined')) { if (window.jQuery) { jQuery191 = window.jQuery; } else if (window.Checkout && window.Checkout.$) { jQuery191 = window.Checkout.$; } } })(); function getHost() { const scripts = document.getElementsByTagName('script'); let scriptUrl = ''; for (let i = 0; i < scripts.length; i++) { if (scripts[i].src.includes('shopify/dataClient.js')) { scriptUrl = scripts[i].src; break; } } return new URL(scriptUrl).origin; } function searchOrder() { $ = jQuery191; var order = new Object(); var name = $("#orderNumber").val(); var total = $("#total").val(); order.ShopName = Shopify.shop; order.OrderId = name; order.OrdenName = total; var host = getHost(); $("#status").show(); $.ajax({ url: host + '/Shopify/Clients/SearchOrder', type: 'GET', async: false, dataType: 'jsonp', data: { info: btoa(JSON.stringify(order)) }, success: function (result) { $("#status").hide(); if (result.success == true) getBilling(result.shop, result.orderId); else alert("No se encontró la orden de compra a facturar, revisa que los datos sean los correctos."); }, error: function () { alert("Ocurrio un error al procesar la peticion."); $("#status").hide(); }, }); } function getBilling(shop, id) { $ = jQuery191; var host = getHost(); $("#status").show(); $.ajax({ url: host + '/Shopify/Clients/getBillingPartial', type: 'GET', async: false, dataType: 'jsonp', data: { shop: shop, orderId: id}, success: function (result) { var html = result.partial; html += 'La version del CFDI es ' + result.version + ' , los datos de Régimen Fiscal y CP es para actualizar el catalogo de clientes.'; $("#containerFacturama").empty().append(html);//result.partial); if ($("#Rfc").val() != undefined && $("#Rfc").val() != "") $("#Rfc").trigger('onkeyup'); $("#status").hide(); }, error: function () { alert("Ocurrio un error al procesar la peticion."); $("#status").hide(); }, }); } function saveClient(isStore) { $ = jQuery191; var error = ValidateClient(); if (error == "") { var client = btoa(JSON.stringify(getDataClient())); var checkout = btoa(JSON.stringify(getCheckOutElements(isStore))); if (client != null && checkout != null) { submitClient(client, checkout, isStore); } else $("#errors").empty().append("Ocurrio un error al obtener la informacion."); } else { $("#errors").empty().append(error); } } function submitClient(client, checkout, isStore) { $ = jQuery191; var host = getHost(); $("#status").show(); $.ajax({ url: host + '/Shopify/Clients/SaveClient', type: 'GET', async: false, dataType: 'jsonp', data: { dataClient: client, checkout: checkout }, success: function (result) { $("#errors").empty(); if (result.onlyData == true) { alert("Se guardo correctamente la información, pongase en contacto con el encargado de la Tienda."); $("#status").hide(); } else if (result.success == true && result.shopInvoiceId > 0 && result.created == false && result.createdByLimit != false) { if (result.orderStatus) { alert("Se guardo correctamente la información, espera un momento en lo que se genera la Factura."); if (result.version == null || result.version == undefined || result.version == "") { alert("Versión no válida para la generación de comprobantes"); $("#status").hide(); }else if (isStore == false) { createCfdi($("[name=ShopName]").val(), result.shopInvoiceId, result.creditNoteId, result.version); } else { createCfdi(Shopify.shop, result.shopInvoiceId, result.creditNoteId, result.version); } } else { alert("Se guardo correctamente la información. La orden se encuentra pendiente de pago, en cuanto se vea reflejado el pago se generará la Factura."); $("#status").hide(); } } else if (result.success == true && result.shopInvoiceId > 0 && result.created == false && result.createdByLimit == false) { alert("Se guardo correctamente la información, pero ya se terminó el tiempo para generar la factura, ponte en contacto con el Vendedor."); $("#status").hide(); }else if (result.success == true && result.shopInvoiceId > 0 && result.created == true) { alert("Se guardaron los datos de Facturación, pero ya existe una factura para esta compra, contacta al vendedor en caso de que necesites se te refacture."); $("#status").hide(); } else { if (result.success == false && result.errors != null) {//&& obj.partialCertif != "" for (var i = 0; i < result.errors.length; i++) { console.log(result.errors[i]); $("#errors").append(result.errors[i]).append("
"); } } alert("Fallo al guardar la información."); $("#status").hide(); } }, error: function () { alert("Ocurrio un error al procesar la peticion."); $("#status").hide(); }, }); } function createCfdi(shop, id, idCreditNote, version) { $ = jQuery191; var host = getHost(); var route = '/Shopify/Invoice' + version + '/CreateCfdiStoreFront'; $("#status").show(); $.ajax({ type: 'GET', dataType: 'jsonp', async:false, url: host + route, data: { ShopName: shop, idShopifyInvoice: (idCreditNote > 0 ? idCreditNote : id) }, success: function (obj) { if (obj.existInvoice == true) { if (idCreditNote != null) createCfdi(shop, id,null); alert("Ya se ha generado la factura, consultala en el correo proporcionado."); } if (obj.success == true && obj.send == true) alert("Se creó correctamente la Factura y se envió al correo proporcionado."); else if (obj.success == true && obj.send == false) alert("Se creó correctamente la Factura."); else alert(obj.message); $("#status").hide(); }, error: function () { alert("Ocurrio un error al procesar la peticion."); $("#status").hide(); }, }); } function getDataClient() { $ = jQuery191; var clie = new Object(); var addressClie = new Object(); var id = $("#IdClient").val(); var name = $("#Name").val(); var rfc = $("#Rfc").val(); var email = $("#Email").val(); var street = $("#Street").val(); var numExt = $("#ExteriorNumber").val(); var numInt = $("#InteriorNumber").val(); var neigh = $("#Neighborhood").val(); var zip = $("#Zipcode").val(); var locality = $("#Locality").val(); var municipality = $("#Municipality").val(); var state = $("#cmbState").val(); var payment = $("#cmbPaymentMethodSho").val(); var useCfdi = $('#cfdiUse').val(); var iva = $('#useIva') != undefined ? $('#useIva').val() : null; var useIeps = $('#cmbBreakDownIeps').val(); var paymenthForm = $('#cmbPaymentForm').val(); var fiscalregime = $('#cmbFiscalRegimes').val(); addressClie.Street = street != "" ? street : null; addressClie.ExteriorNumber = numExt != "" ? numExt : null; addressClie.InteriorNumber = numInt; addressClie.Neighborhood = neigh != "" ? neigh : null; addressClie.ZipCode = zip; addressClie.Locality = locality; addressClie.Municipality = municipality != "" ? municipality : null; addressClie.State = state != "" ? state : null; addressClie.Country = rfc == "XEXX010101000" ? null : "Mexico"; clie.Id = id; clie.Rfc = rfc; clie.Name = name; clie.Email = email; clie.Address = addressClie; clie.PaymentMethod = payment; clie.CfdiUse = useCfdi; clie.IvaPercentage = iva; clie.ShowIeps = useIeps == undefined ? null : useIeps; clie.IvaPercentage = iva; clie.PaymentForm = paymenthForm; clie.FiscalRegime = fiscalregime; return clie; } function getCheckOutElements(isStore) { var model = new Object(); var address = new Object(); if (isStore == false) { model.Shop = $("[name=ShopName]").val(); model.order_id = $("[name=OrderId]").val(); } else if (Shopify != null && Shopify.checkout != null) { model.BillingAddress = address; model.CreatedAt = Shopify.checkout.created_at; model.Currency = Shopify.checkout.currency; if (Shopify.checkout.source_name != "pos") { model.customer_id = Shopify.checkout.customer_id != null ? Shopify.checkout.customer_id.toString() : ""; model.Email = Shopify.checkout.email; } model.order_id = Shopify.checkout.order_id.toString(); model.Token = Shopify.checkout.token; model.Shop = Shopify.shop; } return model; } function getAddressElements() { var address = new Object(); if (Shopify != null && Shopify.checkout != null && Shopify.checkout.billing_address != null) { address.Address1 = Shopify.checkout.billing_address.address1; //address.Address2 = Shopify.checkout.billing_address.address2; address.City = Shopify.checkout.billing_address.city; address.Company = Shopify.checkout.billing_address.company; address.Country = Shopify.checkout.billing_address.country; address.CountryCode = Shopify.checkout.billing_address.country_code; address.FirstName = Shopify.checkout.billing_address.first_name; address.LastName = Shopify.checkout.billing_address.last_name; address.Phone = Shopify.checkout.billing_address.phone; address.Province = Shopify.checkout.billing_address.province; address.ProvinceCode = Shopify.checkout.billing_address.province_code; address.Zip = Shopify.checkout.billing_address.zip; } return address; } function loadDataByRfc(e) { loadCfdiUses(e); if ($("#cmbFiscalRegimes").is(":visible")){ getRegimes(e); } } function loadCfdiUses(e) { $ = jQuery191; var keyword = e.value; var dropDown = $("#cfdiUse"); var allOptions = dropDown.find('option'); if (keyword.length <= 12) {//es persona moral allOptions.each(function () { var elem = $(this); var value = elem.val(); if (value.indexOf("D") == 0) { elem.hide(); } else { elem.show(); } }); } else { allOptions.each(function () { var elem = $(this); elem.show(); }); } //getRegimes(e); } function getRegimes(e, fiscalRegime) { $ = jQuery191; var keyword = e.value; var dropDown = $("#cmbFiscalRegimes"); var allOptions = dropDown.find('option'); if (keyword.length <= 12) {//es persona moral allOptions.each(function () { var elem = $(this); var ismoral = elem.data('moral'); if (ismoral == undefined || ismoral == 1) { elem.show(); } else { elem.hide(); } }); } else { allOptions.each(function () { var elem = $(this); var ismoral = elem.data('moral'); if (ismoral == undefined || ismoral == 0) { elem.show(); } else { elem.hide(); } }); } var fiscalRegime = $('[name="FiscalRegime"]').val(); $('#cmbFiscalRegimes').val(fiscalRegime); } //function fillCmbRegimes(e, catalogRegimes, selected) { // //getCurrentBusinessLine(); // var component; // if (e.name == undefined || !e.name.includes('ThirdPartyAccount.Rfc')) // component = $('#cmbFiscalRegimes'); // else { // var id = e.name.split('[')[1].split(']')[0]; // component = $('#cmbFiscalRegimes_' + id); // } // var keyword = $(e).val(); // var isNatural = false; // component.empty().append($("